SageMaker StudioのJupyterLab Spaceをカスタムイメージで起動する方法
こんちには。
データアナリティクス事業本部 機械学習チームの中村(nokomoro3)です。
本記事ではSageMaker StudioのJupyterLab Spaceをカスタムイメージで起動する方法をご紹介します。
ドキュメントとしては以下に記載がありますので、こちらを参考にご紹介します。
なお、カスタムイメージは先日のアップデートでCode Editor向けも同様にできるようになっております。こちらも後日別の記事にてご紹介しようと思います。
実行環境・ソフトウェア
実行環境やソフトウェアは以下のようにしました。
- OS : Windows 10 (22H2)
- CPUアーキテクチャ : x64 ベース プロセッサ
- Docker CLI : Rancher Desktop
- Docker : version 24.0.7-rd, build 72ffacf
- Docker Compose : version v2.23.3
- AWS CLI : aws-cli/2.13.15 Python/3.11.4 Windows/10 exe/AMD64 prompt/off
準備
SageMaker Studioの作成
コンソールから「ドメイン」を選択した後、「ドメインを作成」を押下します。
今回は「クイックセットアップ」を選択し、「設定」を押下します。
作成中となるので、完了を待ちます。
完了後、ユーザープロファイルも作成されますので、そちらから「Studio」を起動します。
以下のような画面が立ち上がればStudioの準備は完了です。
JupyterLab向けのカスタムイメージの作成
ECRレポジトリの作成
まずはカスタムイメージ用のECRレポジトリを作成します。ECRのマネジメントコンソールから以下を選択します。
「リポジトリを作成」を押下します。
名前を考えて設定します。設定後はデフォルトのまま作成を実行します。
以上でECRレポジトリの作成は完了です。
Dockerfileの作成
次にイメージを作成していきます。以下のようなDockerfileをローカルに作成します。
FROM public.ecr.aws/sagemaker/sagemaker-distribution:latest-cpu ARG NB_USER="sagemaker-user" ARG NB_UID=1000 ARG NB_GID=100 ENV MAMBA_USER=$NB_USER USER root RUN apt-get update RUN micromamba install sagemaker-inference --freeze-installed --yes --channel conda-forge --name base USER $MAMBA_USER ENTRYPOINT ["jupyter-lab"] CMD ["--ServerApp.ip=0.0.0.0", "--ServerApp.port=8888", "--ServerApp.allow_origin=*", "--ServerApp.token=''", "--ServerApp.base_url=/jupyterlab/default"]
こちらは以下に記載のものをそのまま使用しました。
dockerのbuildとpush
dockerやAWS CLIの設定は事前に行っておく必要があります。
buildとpush用にbashスクリプトを作成します。PROFILE
は各自のものを設定してお使いください。REPOSITORY_NAME
は先ほど作成したECRレポジトリ名を設定してください。
PROFILE="{AWSプロファイル名}" REPOSITORY_NAME="cm-nakamura-sample-sagemaker" docker build -f Dockerfile . -t $REPOSITORY_NAME # REGION=$(aws configure get region --profile $PROFILE) REGION="us-east-1" ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text --profile $PROFILE) ECR_BASE_URL="${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com" ECR_IMAGE_URI="${ECR_BASE_URL}/${REPOSITORY_NAME}" echo "ECR_BASE_URL: ${ECR_BASE_URL}" echo "ECR_IMAGE_URI: ${ECR_IMAGE_URI}" # ECRへのログイン aws ecr get-login-password --region ${REGION} --profile $PROFILE | docker login --username AWS --password-stdin ${ECR_BASE_URL} # tagの付け替え docker tag "${REPOSITORY_NAME}:latest" "${ECR_IMAGE_URI}:latest" # ECRへのpush docker push "${ECR_IMAGE_URI}:latest"
上記を実行すれば、ECRにイメージがpushされるところまで完了するはずです。
SageMaker Studioへの設定
ECRレポジトリをSageMaker Studioに関連付け
マネジメントコンソールに戻り、SageMaker Studioのドメインの設定画面で「環境」を選択して、「イメージをアタッチ」を押下します。
「新しいイメージ」を選択して、作成したイメージのURIを入力します。入力後「次へ」を押下します。
イメージ名、イメージ表示名を設定して、IAMロールを設定します。IAMロールは新規作成を選択すると、AmazonSageMakerFullAccessがアタッチされたロールとなるようです。
冒頭のドメイン作成時に高速セットアップを選択した場合、既にAmazonSageMakerFullAccessがアタッチされたロールがAmazonSageMaker-ExecutionRole-{タイムスタンプ}
で新規作成されているのでそちらを今回は設定します。
次にイメージタイプとして「JupyterLab image」をクリックして選択します。
選択されたことが分かりにくく、未設定の場合はRStudioとなるのでご注意ください。
設定後、「送信」を押下します。
しばらく待つと以下のようにアタッチされた状態となります。
動作確認
Studioからのカスタムイメージの起動
左上またはHomeから「JupyterLab」を起動します。
「Create JupyterLab Space」を押下します。
スペース名を設定して、「Create Space」を押下します。
スペースが作成された状態となるので、「Image」に先ほどアタッチしたものがあることを確認して選択します。選択後は「Run space」で起動します。
(これ以降、Spaceを停止するまでは料金が発生いたしますのでご注意ください)
起動後は以下のようになりますので、「Open JupyterLab」でJupyterLabを起動します。
以下のようなJupyterLabの画面が起動すればOKです。
まとめ
如何でしたでしょうか。本記事がSageMaker Studioをお使いになる方の参考になれば幸いです。